﻿using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PowerHub.MES.Jwt
{
    /// <summary>
    /// 提供扩展方法以向依赖注入容器中添加JWT服务的静态类
    /// </summary>
    public static class DiJWTServiceCollectionExtensions
    {
        /// <summary>
        /// 添加JWT相关服务到依赖注入容器
        /// </summary>
        /// <param name="services">依赖注入容器</param>
        /// <param name="serkey">用于签名和解密JWT令牌的密钥</param>
        /// <returns>修改后的依赖注入容器</returns>
        public static IServiceCollection AddJwtService(this IServiceCollection services, string serkey)
        {
            // 创建令牌验证参数
            var tokenValidationParameters = new TokenValidationParameters()
            {
                // 不验证发行者（Issuer）
                ValidateIssuer = false,
                // 发行者设置为"ApiServer"
                ValidIssuer = "ApiServer",
                // 不验证观众（Audience）
                ValidateAudience = false,
                // 验证令牌是否过期
                ValidateLifetime = true,
                // 时钟偏差允许范围为60秒
                ClockSkew = TimeSpan.FromSeconds(60),
                // 验证签名密钥
                ValidateIssuerSigningKey = true,
                // 使用提供的密钥作为签名密钥
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(serkey))
            };

            // 将令牌验证参数注册为单例，以便在应用中的多处使用
            services.AddSingleton(tokenValidationParameters);
            // 注册自定义的JwtService服务
            services.AddSingleton<JwtService>();

            return services;
        }
    }
}
